package cn.green.core.components.table;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import cn.green.core.components.setter.DeleteKey;
import cn.green.core.components.setter.PrimaryKey;
import cn.green.core.excel.model.Column;
import cn.green.core.model.QField;
import cn.green.core.model.QTable;

import java.util.List;

/**
 * @author wang.yishu
 * @version 1.0
 * @className TableTypeCom
 * @description 数据集类型接口
 * @date 2024/11/12 15:18
 */
public interface TableTypeCom {

    String dataTypeName();

    String dataTypeCode();

    boolean needBuildConditionSql();

    //是否可选
    boolean canBeSelected();

    //该表的option前缀url
    String optionsPrefixUrl();

    String[] excludeConditionFields();

    /**
     * 该数据集的固定字段
     * @return
     */
    List<QField> fixFields();

    /**
     * 获取该表的主键
     * @return
     */
    QField getPrimaryKeyField();

    /**
     * 获取主键类型
     * @return
     */
    PrimaryKey getPrimaryKey();

    /**
     * 获取该表的删除标识字段
     * @return
     */
    QField getDeleteKeyField();

    /**
     * 获取该表的删除标识
     * @return
     */
    DeleteKey getDeleteKey();

    /**
     * 获取父级属性字段
     * @return
     */
    QField getParentKeyField();

    /**
     * 该类型是否可以建造条件sql
     * @return
     */
    boolean canBuildConditionSql();

    /**
     * 获取树形下拉
     * @param scheme    表空间
     * @param tableName 表名
     * @return
     */
    JSONArray selectOptions(String source, String scheme, String tableName);

    /**
     * 整理数据
     * @param data
     * @param table
     * @return
     */
    JSONArray arrangeData(JSONArray data, QTable table, JSONObject param);

    /**
     * 整理明细
     * @param detail
     * @param table
     * @return
     */
    JSONObject arrangeDetail(JSONObject detail, QTable table);

    /**
     * 该类型表的固定的excel列
     * @param table 表
     * @return  列
     */
    List<Column> tableColumns(QTable table);
}
